/// 关于路径取值的一些
//      getApplicationDocumentsDirectory()                    路径相当于 '/data/user/0/xx.xx.xx/app_flutter'
//      getTemporaryDirectory()                               路径相当于'/data/user/0/xx.xx.xx/cache'
//      getExternalStorageDirectory()                         仅Android平台可用，路径相当于'/storage/emulated/0'外置存储根路径
//      getApplicationSupportDirectory()                      仅Ios平台可用

/// SQLite支持的数据类型  不支持bool和DateTime
// SQL类型 ==== Dart类型
// integer ==== int
// real    ==== num
// text    ==== String
// blob    ==== Uint8List

/// where和whereArgs的使用
// await _db.query('test',where:"name=? and age=?",whereArgs: ["zs",18]).then((value) => print(value));

/// 插入数据
//1.insert(表名,{"键":值},conflictAlgorithm(冲突算法:枚举类型)) 返回行数
// database.insert('test',{"name":'zs',"age":18}).then((value) => print(value));
//2.rawInsert("SQL语句")

/// 删除数据
// 1.delete("表名",where(条件),whereArgs(条件参数)) eg: delete('test',where: "name=?",whereArgs: ["zs"]);
// 2.rawDelete("SQL语句");

/// 更新数据
// 1.update("表名",要修改的内容{'键':值},where(条件),whereArgs(条件参数),conflictAlgorithm(冲突算法：枚举类型)) eg:database.update('test', {"name":'ls',"age":18},where: "name=?",whereArgs: ['zs']);
// 2.rawUpdate("SQL语句");

/// 查询数据
// 1.query(表名,{distinct,columns(返回哪些字段),where(条件),
// whereArgs(条件参数),groupBy(分组),having(分组后的进行条件查询),
//  orderBy(排序),limit(一次读几条),offset(起始位置)}) 返回读取到的结果(列表)
// 若没有查询条件 则返回这个表的数据
/**
await database.query('test',                 //查询的表名
distinct: true,                              // 不重复
where:"value=? and age=?",whereArgs: [1,18], // 查询 value为1并且age为18的记录
columns: ["name","age"],                     // 返回的记录只包含name和age两个字段
groupBy: "age",                              // 根据age分组
orderBy: "age",                              // 根据age排序
limit: 10,                                   // 一次读取10条记录
offset: 5                                    // 从第5条记录开始查询
);
**/
// 2.rawQuery("SQL语句");

/// 批处理SQL语句 往Batch中添加语句 但是这些语句并不会执行 需要调用commit方法 然后一次性执行
//Batch batch=database.batch();
//batch.insert("test",{"name":'ls'});
//batch.insert("test",{"name":'ww'});
// noResult 是否不需要结果  continueOnError遇到异常是否继续执行
//batch.commit(noResult: true,continueOnError: true).then((value) => print(value));

/// 事务
// 在事务中执行SQL语句 若发生异常 则进行回滚 即全部SQL语句无效
// 四大特征:
// 1. 原子性：即事务中的语句为一个整体 要么全部执行 要么全不执行
// 2. 一致性：保持数据的一致性 如转账 转账过后的总金额需要保持一致
// 3. 隔离性：多个事务并发时  互不干涉内部数据 处理的数据都是别的事务处理前或处理后的数据
// 4. 持久性：事务提交后 数据是持久不可更改的
/**
database.transaction((txn)async{
// txn基本有database中所有的操作 基本可以当做database使用
txn.insert('test',{"name":'Rob'});
});
**/
